<?php
/*
 * 常用公共方法
 * 所以方法名称都用小写 下划线命名
 * @author helong
 * @updatetime 2014年8月27日
 */

/**
 * 从未知源中返回数据
 * @param string array object $data 数据源
 * $key 关键字
 * $default 默认值
 * 使用示例 $posturl = setDefault($_POST,'url');
 * 对大小写不敏感
   $no_empty 为true时,如果值为空,返回默认值
 */
function set_default($data, $key = null, $default = null,$no_empty = false) {
    if (isset($data)) {
        if (is_bool($data) || is_string($data) || is_int($data)) {
            return $data;
        }
        if (is_array($data)) {
            //忽略大小写
            $datas = array();
            $datas = array_change_key_case($data, CASE_LOWER);//数组转为小写
            $keys = strtolower($key);//key转为小写
            if(isset($datas[$keys])){
                //判断是否是对象
                if (is_object($datas[$keys])){
                    $res = (array)$datas[$keys];//返回数组
                }else{
					$res = $datas[$keys];
				}
				
				if($no_empty && empty($datas[$keys])){
					return $default;//为空返回默认值
				}
                return $res;//返回
            }
        }
        if (is_object($data)) {
            $datas = array();
            $datas = (array)$data;//转为数组
            $datas = array_change_key_case($datas, CASE_LOWER);//数组转为小写
            $keys = strtolower($key);//key转为小写
            if(isset($datas[$keys])){
				
                //判断是否是对象
                if (is_object($datas[$keys])){
                    $res = (array)$datas[$keys];//返回数组
                }else{
					$res = $datas[$keys];
				}
				
				if($no_empty && empty($datas[$keys])){
					return $default;//为空返回默认值
				}
                return $res;//返回
				
            }
        }
    }
    return $default;
}

/**
 * 获取post值,post不存在则尝试获取get值
 *
 * @param string $key name
 * @param mixed $default value if key is not found
 * @param boolean $string TRUE to require string type
 * @return mixed
 */
function post($key, $default = NULL, $string = FALSE) {
    if (isset($_POST[$key])) {
        return $string ? (string) $_POST[$key] : $_POST[$key];
    } else {
        if (isset($_GET[$key])) {
            return $string ? (string) $_GET[$key] : $_GET[$key];
        }
    }
    return $default;
}

/*
 * 获取get值,不存在则尝试获取post
 */

function get($key, $default = NULL, $string = FALSE) {
    if (isset($_GET[$key])) {
        $r =  $string ? (string) $_GET[$key] : $_GET[$key];
        return htmlspecialchars($r);
    } else {
        if (isset($_POST[$key])) {
            $r =  $string ? (string) $_POST[$key] : $_POST[$key];
            return htmlspecialchars($r);
        }
    }
    return $default;
}

/*
 * 清除掉空数据,配合post() get()去除空数据
 */

function remove_null($param) {
    if (is_array($param) || is_object($param)) {
        foreach ($param as $k => $v) {
            if ($v === NULL) {
                unset($param[$k]);
            }
        }
    }
    return $param;
}

/**
 * 获取session值,为空返回默认值
 */
function session_fix($key, $default = NULL) {
    return isset($_SESSION[$key]) ? $_SESSION[$key] : $default;
}

/*
 * 设置客户端cookie
 * 设置成功返回true
 * 默认过期时间为1天
 */

function setc($name, $value, $expire = null, $path = '/', $domain = null, $secure = false, $httponly = true) {
    if (is_null($expire))
        $expire = 1 * 24 * 60 * 60; //一天
    if (is_null($domain) && isset($_SERVER['HTTP_HOST']))
        $domain = trim(str_ireplace('www.', '', $_SERVER['HTTP_HOST']));
    return setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);
}

/*
 * 获取cookie
 * @param string $name 名称
 */

function getc($name) {
    if (!isset($_COOKIE[$name]))
        return false;
    return htmlspecialchars($_COOKIE[$name]);
}

/*
 * 删除cookie
 * @param string $name 名称
 */

function delc($name) {
    return setcookie($name, '', time() - 3600);
}


//验证座机
function check_tel($str) {
    if (preg_match("/^([0-9]{2}-?)?0[0-9]{2}-[0-9]{8}$/", $str)) {
        return true; //3位区号  
    } else if (preg_match("/^([0-9]{2}-?)?0[0-9]{10}$/", $str)) {
        return true;
    } else if (preg_match("/^([0-9]{2}-?)?0[0-9]{3}-[0-9]{7}/$", $str)) {
        return true; //4位区号  
    }
    return false;
}

/**
 * 验证手机号码
 */
function check_mobile($mobile) {
    return preg_match("/^1[3|4|5|7|8][0-9]\d{8}$/", $mobile);
}



/**
 * 验证电子邮箱
 */
//var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
function check_email($email) {
    return strlen($email) > 6 && preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/', $email);
}

/**
 * 发送邮件
 * @param    string array   $address       地址
 * @param    string    $title 标题
 * @param    html    $message 邮件内容
 * @param    array $attachment 附件列表
 * @return   boolean 
  $address = array(array('zhang1@helong.org','张1'),array('zhangshan2@helong.org','张2'));
  $address = 'sdfsdf@163.com';
 */

function send_mail_bak($address, $title, $message, $attachment = null) {
    $p = Vendor('phpmailer/phpmailer#class');
    $mail = new PHPMailer;
    return $mail->send_mail($address, $title, $message, $attachment = null);
}

/*
 * 打印数组,用于输出调试信息
 * @param array $arr
 */

function pr($arr) {
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
}

/*
 * 打印数组,并中断执行,用于输出调试信息
 */

function _pr($arr) {
    pr($arr);
    exit;
}

/*
 * 输出华丽的分割线
 */

//返回
function hr() {
    return "-------------分-------------割-------------线-------------";
}

//直接输出
function _hr() {
    echo "<br>-------------分-------------割-------------线-------------<br>";
}

/*
 * miku
 */

function miku() {
    echo <<< EOT
　　　　　　　 #########　　　　　　　　　　　 <br>
　　　　　　　############　　　　　　　　　　 <br>
　　　　　　　#############　　　　　　　　　　<br>
　　　　　　 ##　###########　　　　　　　　　 <br>
　　　　　　###　###### #####　　　　　　　　　<br>
　　　　　　### #######　 ####　　　　　　　　 <br>
　　　　　 ###　########## ####　　　　　　　　<br>
　　　　　####　########### ####　　　　　　　 <br>
　　　　#####　 ###########　#####　　　　　　 <br>
　　　 ######　 ### ########　 #####　　　　　 <br>
　　　 #####　 ###　 ########　 ######　　　　 <br>
　　　######　 ###　###########　 ######　　　 <br>
　　 ######　 #### ##############　######　　　<br>
　　#######　##################### #######　　 <br>
　　#######　##############################　　<br>
　 #######　###### ################# #######　 <br>
　 #######　###### ###### #########　 ######　 <br>
　 #######　　##　######　 ######　　 ######　 <br>
　 #######　　　　######　　#####　　 #####　　<br>
　　######　　　　#####　　 #####　　 ####　　 <br>
　　 #####　　　　####　　　#####　　 ###　　　<br>
　　　#####　　　;###　　　　###　　　#　　　　<br>
　　　　##　　　 ####　　　　####　　　　　　　<br>
EOT;
}

/*
 * 世界和平
 */

function buddha() {
    echo <<< EOT
　　　　　　　　　　　　　　　　　_oo0oo_<br>
　　　　　　　　　　　　　　　　 088888880<br>
　　　　　　　　　　　　　　　　 88" . "88<br>
　　　　　　　　　　　　　　　　 (| -_- |)<br>
　　　　　　　　　　　　　　　　　0\ = /0<br>
　　　　　　　　　　　　　　　 ___/'---'\___<br>
　　　　　　　　　　　　　　 .' \\\\|　　 |// '.<br>
　　　　　　　　　　　　　　/ \\\\|||　:　|||// \\<br>
　　　　　　　　　　　　　 /_ ||||| -:- |||||- \\<br>
　　　　　　　　　　　　　|　 | \\\\\\　-　/// |　 |<br>
　　　　　　　　　　　　　| \_|　''\---/''　|_/ |<br>
　　　　　　　　　　　　　\　.-\__　'-'　__/-.　/<br>
　　　　　　　　　　　　___'. .'　/--.--\　'. .'___<br>
　　　　　　　　　　 ."" '<　'.___\_<|>_/___.' >'　"".<br>
　　　　　　　　　　| | : '-　\'.;'\ _ /';.'/ - ' : | |<br>
　　　　　　　　　　\　\ '_.　 \_ __\ /__ _/　 .-' /　/<br>
　　　　　　　　====='-.____'.___ \_____/___.-'____.-'=====<br>
　　　　　　　　　　　　　　　　　'=---='<br>
　
　　　　　　　^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
　　　　　　　　　　　　佛祖保佑　　iii　　世界和平<br>
EOT;
}

/*
 * memcache 链接test
 */

function mem($value) {
    $mem = new Memcache;
    $mem->connect(MEMCACHE_HOST, MEMCACHE_PORT, 0, MEMCACHE_EXPIRE);
    //  $mem->set("key", $value, 0, 60);
    echo $value = $mem->get("fuck");
}

/*
 * 取得中文语言包翻译信息,语言文件在 /config/ZH_CN.php
 * @param string $english 英文
 */

function lang($english = "HELLO_CHINESE_WORLD") {
    $chinese = include_once(ROOT . DS . 'config' . DS . 'ZH_CN.php');
    //无对应翻译则返回原文
    return set_default($chinese, $english, $english);
}

/*
  获取拼音首字母
 */
function first_char($str) {
    $p = vendor('pinyin/pinyin#class');
    $pinyin_data = new pinyin();
    return $firt_char = $pinyin_data->getFirstChar($str);
}


/*
  获取拼音
 */
function pinyin($_String, $pix = '', $_Code = 'utf8') {
    $p = vendor('pinyin/pinyin#class');
    $pinyin_data = new pinyin();
    return $pin = $pinyin_data->pinyin($_String, $pix = '', $_Code = 'utf8');
}


/*
 * 输出json并退出执行,用于接口返回json数据
 * @param array $arr 要输出的数组
 */

function exit_json($arr) {
    ob_start();
    ob_end_clean(); //清空之前的输出
    header('Content-type: application/json'); //输出json头
    exit(json_encode($arr, true)); //直接输出json
    //  echo $json = str_replace("null", "\"\"", $json);//替换null为空,已经用设置pdo参数方法替换这个方法
}

/*
 * 返回数组格式封装,用于标准化api接口输出格式
 * @param int $ret = 0,接口正确,其他错误
 * @param string $msg 提示消息
 * @param array $data 数据
 * @param int debug = 1 ,调试信息返回, 可选
 * @param string url ,下一步跳转url , 可选
 */

function return_json($ret = 0, $msg = "SUCCESS", $data = '',$url = '', $header = 'json', $debug = 0) {
    //获取中文提示语句
    // $msg = L($msg);

    $return = array(
        'ret' => $ret, //状态码,0成功, 其他失败
        'msg' => $msg, //消息
        'data' => $data //数据
    );

    if ($debug) {
        $return['debug'] = $debug;
    }

    if ($url) {
        $return['url'] = $url;
    }

    if ($header == 'json') {
        exit_json($return); //直接输出json
    }else if ($header == 'text'){
		ob_start();
		ob_end_clean(); //清空之前的输出
		header("Content-type: text/html; charset=utf-8");
		exit(json_encode($return, true)); //直接输出json
	}

    //其他返回数组
    return $return;
}

//清除数组空格  
function trim_value(&$value) {
    $value = trim($value);
}

/*
 * 字符按个数截断，默认UTF8编码,超出部分用...表示
 * @param string $str 要截取的字符
 * @param int $length 保留长度
 * @param string $dot 超出部分如何处理,默认用...代替
 */

function cutstr_bak($str, $length, $dot = '...', $charset = 'utf-8') {
    if (mb_strlen($str) <= $length) {
        return $str; //小于截取长度直接返回
    } else {
        return mb_substr($str, 0, $length, $charset) . $dot;
    }
}


/**
 * 建立文件夹
 * @param string $pathstr 文件路径 直接写文件路径即可
 * @param bool $save 是否开启安全模式
 * 如果开启安全模式  则建一个空的Index文件
 */
function create_dir($pathstr, $save = true) {
    if (isset($pathstr) && is_string($pathstr) && $pathstr != '.' && $pathstr != '..') {
        $pathstr = str_replace(DS, '/', $pathstr);
        $pathstr = str_replace('//', '/', $pathstr);
        $path = explode('/', $pathstr);
        $suffix = array_pop($path); //弹出最后一个,如果非空.则这最后一个为将要建立的文件
        $filename = trim($suffix);
        if ($path [0] == '') {
            $path [1] = '/' . $path [1]; //考虑到如果是UNIX根目录,则第一个为空 . 加上DS作为根目录
        }

        if (isset($path) && is_array($path)) {
            $dir = '';
            foreach ($path as $folder) {
                $folder = trim($folder);
                if ($folder != '' && $folder != '/') {
                    $dir .= $folder . '/';
                    if ($folder != '..' && $folder != '.') {
                        if (!is_dir($dir) && !is_file($dir)) {
                            if (!file_exists($dir)) {
                                mkdir($dir, 0777);
                                if ($save) {
                                    //如果开启安全模式  则建一个空的Index文件
                                    file_put_contents($dir . 'index.htm', '');
                                }
                            }
                            chmod($dir, 0777);
                        }
                    }
                }
            }
        }
        if (is_file($pathstr)) {
            chmod($pathstr, 0777);
        }
    }
}

//格式化文件大小函数
function format_size($size) {
    if (empty($size)) {
        return '--';
    }
    $sizetext = array(" B", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizetext[$i];
}

/**
 * 格式化价格,保留两位小数
 * @param float $price 价格
 * @param string $price_format 价格格式(单位)
 */
function price_format($price, $price_format = NULL) {
    if (empty($price)) {
        $price = '0.00';
    }
    $price = number_format($price, 2, '.', '');
    if ($price_format === NULL) {
        $price_format = "￥%s";
    }
    return sprintf($price_format, $price);
}

//格式化时间
/*
  一分钟内"刚刚"
  一小时内"* 分钟前"
  今天内"今天 小时：分钟"
  昨天内"昨天 小时：分钟"
  大于2天"年-月-日 小时：分钟"
 * @param int $beforetime  要格式化的时间戳
 */
function format_date($beforetime) {
    $time = time() - $beforetime;
    $today = strtotime(date("M-d-y", mktime(0, 0, 0, date("m"), date("d"), date("Y"))));
    if ($time <= 60) {
        return '刚刚';
    } elseif ($time >= 60 && $time < 3600) {
        $return = intval($time / 60) . " 分钟前";
    } else {
        if ($beforetime > $today) {
            $return = "今天 " . date("H:i", $beforetime);
        } elseif ($beforetime < $today && $beforetime > ($today - 86400)) {
            $return = "昨天 " . date("H:i", $beforetime);
        } else {
            $return = date("Y-m-d H:i", $beforetime);
        }
    }
    return $return;
}

/* 计算年龄 */

//$birthy 日期:1981-10-5
function getage($birth) {
    list($byear, $bmonth, $bday) = explode('-', $birth);
    if(!$byear){
        return 0;
    }
    $age = date('Y') - $byear - 1;
    $tmonth = date('n');
    $tday = date('j');
    if ($tmonth > $bmonth || $tmonth == $bmonth && $tday > $bday) {
        $age++;
    }
    return $age;
}

//返回中文或非中文
function get_word($str, $chinese = true) {
    if ($chinese) {
        if (preg_match('/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u', $str)) {
            return $str;
        } else {
            return false;
        }
    } else {
        if (preg_match('/^[A-Za-z0-9_]+$/i', $str)) {
            return $str;
        } else {
            return false;
        }
    }
}

//语言替换
function lang_replace($text, $vars) {
    if ($vars) {
        foreach ($vars as $k => $v) {
            $rk = $k + 1;
            $text = str_replace('\\' . $rk, $v, $text);
        }
    }
    return $text;
}

/**
 * 获取重新设置大小后的图片地址
 * 配合图片服务器对图片进行裁剪等操作
 * @param string $url 图片地址
 * @param int $w 新图片宽度
 * @param int $h 新图片高度
 */
function resize_image_url($url, $w, $h) {
    $filename = basename($url);
    $arr = explode('.', $filename);
    $ext = array_pop($arr);
    return str_replace($filename, '', $url) . implode('.', $arr) . '_' . $w . '_' . $h . '.' . $ext;
}

/**
 * 生成随机字符串
 * @param int $len 要生产的字符长度
 * @param int $type=0字母 ,1=数字,2=大写字母,3=小写字母,4字母和数字,默认为去掉0O1Lol
 有bug
 */

function rand_string($len = 6, $type = 4) {
    switch ($type) {
        case 0:
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
            break;
        case 1:
            $chars = str_repeat('0123456789', 3);
            break;
        case 2:
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            break;
        case 3:
            $chars = 'abcdefghijklmnopqrstuvwxyz';
            break;
        case 4:
            $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789oOLl01';
            break;
        default :
            // 默认去掉了容易混淆的字符oOLl和数字01
            $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';
            break;
    }
    if ($len > 10) {//位数过长重复字符串一定次数
        $chars = $type == 1 ? str_repeat($chars, $len) : str_repeat($chars, 5);
    }
    $chars = str_shuffle($chars); //打乱顺序
    $str = substr($chars, 0, $len);
    return $str;
}

/*
 * 生成容易阅读的随机字符串,更接近单词
 */

function rand_word($length = 6) {
    $conso = array("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "v", "w", "x", "y", "z");
    $vocal = array("a", "e", "i", "o", "u");
    $password = "";
    srand((double) microtime() * 1000000);
    $max = $length / 2;
    for ($i = 1; $i <= $max; $i++) {
        $password.=$conso[rand(0, 19)];
        $password.=$vocal[rand(0, 4)];
    }
    return $password;
}

/**
 * 生成32位随机 MD5 token
 * @return string
 */
function token() {
    return md5(str_shuffle(chr(mt_rand(32, 126)) . uniqid() . microtime(TRUE)));
}

/**
 * 是否是由微信 端等进入
 * param string $device =wechat,iphone,ipad,android  = 微信 iphone,ipad ,安卓设备
 * 使用示例 platform('wechat');
 */
function is_platform($device) {
    //判断浏览器useragent中是否有关键字MicroMessenger, 如需精准判断可以用前端js
    if ($device == "wechat") {
        $device = "MicroMessenger"; //微信浏览器
    }
    if (stripos($_SERVER['HTTP_USER_AGENT'], $device) !== false) {
        return true;
    }
    return false;
}

/**
 * 判断是否是手机访问
 */
function is_mbile() {
    $agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    if (stripos($agent, "iphone") || strpos($agent, "Opera Mini") || stripos($agent, "ucweb") || stripos($agent, "android") || stripos($agent, "Windows CE") || stripos($agent, "MicroMessenger")) {
        return true;
    } else {
        return false;
    }
}

/*
*new
判断手机平台
*/
function get_device_name(){
    $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
    $iphone = (strpos($agent, 'iphone')) ? true : false;
    $ipad = (strpos($agent, 'ipad')) ? true : false;
    $android = (strpos($agent, 'android')) ? true : false;
    if($iphone || $ipad){
		return "ios";
    } 
    if($android){
		return "android";
    }  
}

/**
 * 无需理会此函数,计算角度,用在距离计算中
 */
function rad($d) {
    return $d * M_PI / 180.0;
}

/**
 * 计算距离
 * @param float $lat1, $lng1, $lat2, $lng2  两个地址的经纬度
 */
function get_distance($lat1, $lng1, $lat2, $lng2) {
    $radLat1 = rad($lat1);
    $radLat2 = rad($lat2);
    $a = $radLat1 - $radLat2;
    $b = rad($lng1) - rad($lng2);
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
    $s = $s * EARTH_RADIUS;
    //$s = round($s * 10000) / 10000;
    return $s;
}

/**
 * 通过IP获取用户当前的位置
 * @return mix 当定位失败的时候 返回FALSE
 */
function location($ip) {
    $url = 'http://api.map.baidu.com/location/ip?';
    $data = array(
        'ip' => $ip,
        'ak' => BAIDU_MAP_AK,
        'coor' => 'bd09ll'
    );
    $result = curl($url . http_build_query($data));
    if ($result) {
        $result = json_decode($result, true);
        if ($result['status'] == 0) {
            return $result['content']['point'];
        } else {
            return false;
        }
    }
    return false;
}

/**
 * 字符编码转换
 *
 * @param string $string 要转换的字符
 * @param string $to 最终的编码格式
 * @param string $from 当前编码格式
 * @return string
 */
function encode($string, $to = 'UTF-8', $from = 'UTF-8') {
// Convert the string
    return @iconv($from, $to . '//TRANSLIT//IGNORE', $string);
}

/**
 * curl方式，向指定的地址发送一个curl命令，以POST的方式
 * @param string $url 访问的URL地址
 * @param array $posts POST的数据
 * @param boolean $return 是否返回
 * */
/**
 * curl方式，向指定的地址发送一个curl命令，以POST的方式
 * @param string $url 访问的URL地址
 * @param array $posts POST的数据
 * */
function curl($url, $posts='', $method='GET',$time=60) {
    !extension_loaded('curl') && exit('CURL function not work, please check your environment!');
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_TIMEOUT, $time); // 设置超时
    //请求方式
    if ($method == 'POST') {
        curl_setopt($curl, CURLOPT_POST, count($posts));
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($posts)); // 在HTTP中的"POST"操作。如果要传送一个文件，需要一个@开头的文件名
    }
    
    //使用苹果6手机的useragent
    $iPhone6 = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/6.0 NetType/WIFI";
    curl_setopt($curl, CURLOPT_USERAGENT, $iPhone6);
    
    $domain = parse_url($url);
    $refer = $domain['scheme']."://".$domain['host'];
    //http://mmbiz.qpic.cn
    if($refer == 'http://mmbiz.qpic.cn'){
        $refer = 'https://mp.weixin.qq.com';
    }
    
    
    
    curl_setopt($curl, CURLOPT_REFERER, $refer); //伪造来路页面
    
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 不直接输出内容到页面
	
	if(stripos($url,'https://') !== false){
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    }
    curl_setopt($curl, CURLOPT_URL, $url);
    $result = curl_exec($curl);
    if (curl_errno($curl)) {
        //出错则显示错误信息
        return false;
    }
    curl_close($curl);
    return $result;
}

/**
 * 将特殊字符转换成安全字符,这个单词太长了
 有bug
 */

function h($string) {
    return htmlspecialchars($string, ENT_QUOTES, 'utf-8');
}


/*
 * 去除html 空格 换行等html标签
 */

function clear_html($content) {
    $subject = trim(strip_tags($content)); //去除html标签
    $pattern = '/\s/'; //去除空白
    $content = preg_replace($pattern, '', $subject);
    return $content;
}

/**
 * 对用户的密码进行加密
 * @param $password
 * @param $salt 密码盐
 * @return array
 */
function get_password($password, $salt = '') {
    $pwd = array();
    $pwd['salt'] = $salt ? $salt : rand_string(6, 4); //产生长度为6的随机盐
    $pwd['password'] = md5(md5(trim($password)) . $pwd['salt']); //两次md5然后拼接盐
    return $pwd;
}

/*
 * base64_encode编码 base64_decode() 解码
 */

/*
 * base64_encode编码 base64_decode() 解码
 */

/*
 * 导出Excel表格
 * 
 * 使用示例:
  $data = array();
  foreach ($orders as => $v) {
  $data[] = array(
  $v['sn'],
  $v['name'],
  $v['price'],
  $v['making_up_price'],
  $v['buyer_name'],
  $v['grade'],
  $v['status']
  );
  }
  $th = array(
  '订单编号',
  '项目名称',
  '销售价格',
  '结算价格',
  '购买用户',
  '会员等级',
  '订单状态'
  );
  $filename = 'Orders_' . date('YmdHis') . '_' . $seller . '.xls';
  export_excel($data, $filename, '订单统计', $th);
 * 使用示例结束
 * @param array $data 数据
 * @param string $excelFileName 下载到的文件名称
 * @param string $sheetTitle 表格标题
 * @param array $thfields 表头标题
 */

function export_excel($data, $excelFileName, $sheetTitle, $thfields = array()) {
    $p = Vendor('phpexcel/phpexcel#class');
    // 实例化类 
    $objPHPExcel = new PHPExcel();

    // 设置输出的excel文件为2007兼容格式 
    //$objWriter=new PHPExcel_Writer_Excel5($objPHPExcel);//非2007格式
    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);

    // 设置当前的sheet 
    $objPHPExcel->setActiveSheetIndex(0);
    $objActSheet = $objPHPExcel->getActiveSheet();

    // 设置宽度 
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
    $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(60);

    $m = 'A';
    foreach ($thfields as $values) {
        // excel文件内容 
        $objPHPExcel->getActiveSheet()->setCellValue($m . 1, $values);
        $m++;
    }

    // sheet标题
    $objActSheet->setTitle($sheetTitle);
    $i = 2;
    foreach ($data as $value) {
        // excel文件内容 
        $j = 'A';
        foreach ($value as $value2) {
            $objActSheet->setCellValue($j . $i, $value2);
            $j++;
        }
        $i++;
    }

    // 生成到浏览器，提供下载 
    ob_end_clean();  //清空缓存
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
    header("Content-Type:application/force-download");
    header("Content-Type:application/vnd.ms-execl");
    header("Content-Type:application/octet-stream");
    header("Content-Type:application/download");
    header('Content-Disposition:attachment;filename="' . $excelFileName . '.xlsx"');
    header("Content-Transfer-Encoding:binary");
    $objWriter->save('php://output');
    exit;
}


/**
 * 生成二维码
 * @param    string $text 文本内容
 * @param    Boolean $outfile    是否输出文件
 * @param    int $level   纠错级别
 * @param    int $size 尺寸
 * @param    int margin 边框留白尺寸
 * 
 * $saveandprint true,保存图片并输出
 * $outfile 图片保存路径,false不保存
 * 
 */
function qrcode($text = "test", $outfile=false, $level = 1, $size = 8, $margin = 1,$saveandprint=false) {

    if(file_exists($outfile)){
        //图片已经存在
        if($saveandprint){
            header("Content-Type:image/png");
            $PSize = filesize($outfile);
            $picturedata = fread(fopen($outfile, "r"), $PSize);
            echo $picturedata;
        }
    }else{
        vendor('qrcode/qrcode#class');
        /* 实例化类 */
        $QRcode = new QRcode();
        create_dir($outfile);
        $QRcode->png($text, $outfile, $level, $size, $margin,$saveandprint);
    }
}

/**
 * 方法一：
 * 无限分类菜单树 将数据格式化成树形结构
 * 此方法由@Tonton 提供
 * @form http://levi.cg.am
 * @date 2012-12-12
 */
/*
无限分类菜单树 将数据格式化成树形结构
  $items = array(
  1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
  2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),
  3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),
  4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),
  5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
  6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
  7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
  8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
  9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
  10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
  11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
  12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
  13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
  14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
  15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
  16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
  17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
  18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
  19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
  );
 * genTree5($items)
 */

function genTree5(Array $items) {
    foreach ($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

/*
 * 获取当前页面网址
 */

function get_page_url() {
    $url = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') ? 'https://' : 'http://';
    $url .= $_SERVER['HTTP_HOST'];
    $url .= isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : urlencode($_SERVER['PHP_SELF']) . '?' . urlencode($_SERVER['QUERY_STRING']);
    return $url;
}

/*
 * 是否是ajax
 */

function is_ajax() {
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        return true;
    }
    return false;
}

/*
 * 是否post请求
 */

function is_post() {
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        return true;
    }
    return false;
}

/*
 * 关键字高亮
 */

function highlight($sString, $aWords) {
    if (!is_array($aWords) || empty($aWords) || !is_string($sString)) {
        return false;
    }

    $sWords = implode('|', $aWords);
    return preg_replace('@\b(' . $sWords . ')\b@si', '<strong style="background-color:yellow">$1</strong>', $sString);
}

/*
 * 图片链接改成base64
 */

function embed_images(&$body) {
    // get all img tags
    preg_match_all('/<img.*?>/', $body, $matches);
    if (!isset($matches[0]))
        return;
    // foreach tag, create the cid and embed image
    $i = 1;
    foreach ($matches[0] as $img) {
        // make cid
        $id = 'img' . ($i++);
        // replace image web path with local path
        preg_match('/src="(.*?)"/', $body, $m);
        if (!isset($m[1]))
            continue;
        $arr = parse_url($m[1]);
        if (!isset($arr['host']) || !isset($arr['path']))
            continue;
        // add
        $this->AddEmbeddedImage('/home/username/' . $arr['host'] . '/public' . $arr['path'], $id, 'attachment', 'base64', 'image/jpeg');
        $body = str_replace($img, '<img alt="" src="cid:' . $id . '" style="border: none;" />', $body);
    }
}

/*
 * 获取性别
 * 1男  2女 0保密
 */

function get_sex($sex = 1) {
    return intval($sex) === 1 ? '男' : (intval($sex) === 2 ? '女' : ($sex == 0 ? '保密' : ''));
}

/*
 * 又拍云上传图片
 * @param string $localpic 本地图片路径
 * @param string $remotepic 又拍路径
 * @param string $thumb 又拍自定义名称,在又拍管理后台创建, 如果此项有定义,优先级高于 $type ,$value
 * @param string $type 缩略图类型
 * @param string $value 缩略图尺寸
  文件空间上传成功后返回`True`，图片空间上传成功后一数组形式返回图片信息：
  array(
  'x-upyun-width' => 2000,
  'x-upyun-height' => 1000,
  'x-upyun-frames' => 1
  'x-upyun-file-type' => "JPEG"
  )
 */

//http://wiki.upyun.com/index.php?title=HTTP_REST_API%E6%8E%A5%E5%8F%A3#.E5.9B.BE.E7.89.87.E7.BC.A9.E7.95.A5
function upyun_upload($localpic = "", $remotepic = '', $thumb = '', $type = 'fix_width', $value = '640') {
    vendor('upyun/upyun#class');
	$bucket = "renren";
	$user = "renren";
	$pass = "ZfDSCc7N";
    $upyun = new \Think\upyun($bucket,$user ,$pass );

    try {

        if (!empty($thumb)) {
            //echo "=========按照预先设置的缩略图类型生成缩略图类型生成缩略图，不保存原图，仅对图片空间有效\r\n";
            $opts = array(
                upyun::X_GMKERL_THUMBNAIL => $thumb,
                upyun::CONTENT_MD5 => md5(file_get_contents($localpic)), //md5文件完整校验
            );
            $fh = fopen($localpic, 'rb');
            $rsp = $upyun->writeFile($remotepic, $fh, True, $opts);   // 上传图片，自动创建目录
            fclose($fh);
            var_dump($rsp);
            //echo "=========DONE\r\n\r\n";
        } else {
            //echo "=========直接生成缩略图，不保存原图片，仅对图片文件有效\r\n";
            $opts = array(
                upyun::X_GMKERL_TYPE => $type, // 缩略图类型
                upyun::X_GMKERL_VALUE => $value, // 缩略图大小
                upyun::X_GMKERL_QUALITY => 95, // 缩略图压缩质量
                upyun::X_GMKERL_UNSHARP => True, // 是否进行锐化处理
                upyun::CONTENT_MD5 => md5(file_get_contents($localpic)), //md5文件完整校验
            );
            $fh = fopen($localpic, 'rb');
            $rsp = $upyun->writeFile($remotepic, $fh, True, $opts);   // 上传图片，自动创建目录
            fclose($fh);
            var_dump($rsp);
            //echo "=========DONE\r\n\r\n";
        }
    } catch (Exception $e) {
        echo $e->getCode();
        echo $e->getMessage();
    }
}

/*
  标准API错误代码表

  HTTP状态码	 返回代码	 含义
  200	 OK	 操作成功
 * **UpYunAuthorizationException** 401，授权错误
 * **UpYunForbiddenException** 403，权限错误
 * **UpYunNotFoundException** 404，文件或目录不存在
 * **UpYunNotAcceptableException** 406， 目录错误
 * 如果又拍云服务端收到的文件 MD5 值与用户设置的不一致,将回报 406 Not Acceptable 错误
 * **UpYunServiceUnavailable** 503，系统错误
 */
/*
 * 获取又拍图片列表
 * @param string $path 图片路径
 */

function upyun_piclist($path) {
    vendor('upyun/upyun#class');
	$bucket = C("UPYUN_BUCKET") ? C("UPYUN_BUCKET") : "renren";
	$user = C("UPYUN_USER") ? C("UPYUN_USER") : "renren";
	$pass = C("UPYUN_PASSWORD") ? C("UPYUN_PASSWORD") : "ZfDSCc7N";
    $upyun = new upyun($bucket,$user ,$pass );

    try {
        // echo "=========获取目录文件列表\r\n";
        $list = $upyun->getList($path);
        var_dump($list);
        //  echo "=========DONE\r\n\r\n";
    } catch (Exception $e) {
        echo $e->getCode();
        echo $e->getMessage();
    }
}


/**
 *  判断日期 所属 干支 生肖 星座
 *  type 参数：XZ 星座 GZ 干支 SX 生肖
 *
 * @static
 * @access public
 * @param string $type  获取信息类型
 * @return string
 */
function magicInfo($type,$y,$m,$d) {
    $result = '';

    switch ($type) {
        case 'XZ'://星座
            $XZDict = array('摩羯', '宝瓶', '双鱼', '白羊', '金牛', '双子', '巨蟹', '狮子', '处女', '天秤', '天蝎', '射手');
            $Zone = array(1222, 122, 222, 321, 421, 522, 622, 722, 822, 922, 1022, 1122, 1222);
            if ((100 * $m + $d) >= $Zone[0] || (100 * $m + $d) < $Zone[1])
                $i = 0;
            else
                for ($i = 1; $i < 12; $i++) {
                    if ((100 * $m + $d) >= $Zone[$i] && (100 * $m + $d) < $Zone[$i + 1])
                        break;
                }
            $result = $XZDict[$i] . '座';
            break;

        case 'GZ'://干支
            $GZDict = array(
                array('甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'),
                array('子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥')
            );
            $i = $y - 1900 + 36;
            $result = $GZDict[0][$i % 10] . $GZDict[1][$i % 12];
            break;

        case 'SX'://生肖
            $SXDict = array('鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪');
            $result = $SXDict[($y - 4) % 12];
            break;
    }
    return $result;
}

/* 文件日志 */

function wlog($data = null) {
    $url = get_page_url();
    //Runtime/
    $dest = ROOT . DS . 'Application' . DS ."Runtime". "Data".date('Y-m'); //按月存放
    if (!is_dir($dest)) {
        @mkdir($dest);
        @chmod($dest, 0777);
    }
    $data = "Time: " . date("Y-m-d H:i:s") . " url:" . $url . PHP_EOL . "Data: " . var_export($data, true) . PHP_EOL . hr() . PHP_EOL;
    file_put_contents($dest . DS . date('Y-m-d') . '.txt', $data, FILE_APPEND);
}


/*
 * 微秒和秒转换
 */
function spend_time($start,$end){
    return round(($end-$start),4);//微妙保留4位小数
}

/*
* 新浪短网址
http://open.weibo.com/wiki/2/short_url/shorten
//调用频率 单用户每应用 2000次/小时
//推荐
*/
function sina_url_short($url){
	$appkey = defined('WEIBO_KEY') ? WEIBO_KEY : "845153956";
	$url = urlencode($url);
	$furl = "http://api.weibo.com/2/short_url/shorten.json?source=".$appkey."&url_long=".$url;
	$res = file_get_contents($furl);
	$json = json_decode($res,true);
	if(isset($json['urls'][0]['result']) && $json['urls'][0]['result']){
		return $json['urls'][0]['url_short'];
	}
	return $url;
}

/*
*
* 微信网址缩短
http://mp.weixin.qq.com/wiki/index.php?title=%E9%95%BF%E9%93%BE%E6%8E%A5%E8%BD%AC%E7%9F%AD%E9%93%BE%E6%8E%A5%E6%8E%A5%E5%8F%A3
//每日1000次频率
//不推荐
*/


function wechat_url_short($url,$access_token){
	$furl = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=".$access_token;
	$res = curl($furl);
	$json = json_decode($res,true);
	if(isset($json['short_url']) && $json['short_url']){
		return $json['short_url'];
	}
	return $url;
}

/*
* 删除/替换网址参数
*/
function change_url_params($url,$params=null,$replace=array()){
	$url_array = parse_url($url);

	if(isset($url_array['query']) && $url_array['query']){
		parse_str($url_array['query'],$url_params);//分解网址
		if(is_array($params) && !empty($params)){
			foreach($params as $k=>$v){
				unset($url_params[$v]);//删除参数
			}
		}else if(is_string($params)){
			unset($url_params[$params]);//删参数
		}
		
		if(is_array($replace) && !empty($replace)){
			foreach($replace as $k=>$v){
				$url_params[$k] = $v;//替换或者添加参数
			}
		}
		$url_array['query'] = http_build_query($url_params);//重新生成网址
	}

	$new_url = $url_array['scheme']."://".$url_array['host'].$url_array['path'];//域名路径
	$new_url .= (isset($url_array['query']) && $url_array['query']!='') ?  "?".$url_array['query'] : '';//参数
	$new_url .= (isset($url_array['fragment']) && $url_array['fragment']!='') ?  "#".$url_array['fragment'] : '';//锚链接
	return $new_url;
}


/*
* 获取当前网址
*/
function get_this_url(){
	return $this_url =  'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}

/*
* 获取http://域名
*/
function get_domain(){
	return $this_url =  'http://'.$_SERVER['HTTP_HOST'];
}

/**
 * 系统加密方法
 * @param string $data 要加密的字符串
 * @param string $key  加密密钥
 * @param int $expire  过期时间 单位 秒
 * @return string
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function encrypt_bak($data, $key = '', $expire = 0) {
    $key  = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
    $data = base64_encode($data);
    $x    = 0;
    $len  = strlen($data);
    $l    = strlen($key);
    $char = '';

    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }

    $str = sprintf('%010d', $expire ? $expire + time():0);

    for ($i = 0; $i < $len; $i++) {
        $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
    }
    return str_replace(array('+','/','='),array('-','_',''),base64_encode($str));
}

/**
 * 系统解密方法
 * @param  string $data 要解密的字符串 （必须是think_encrypt方法加密的字符串）
 * @param  string $key  加密密钥
 * @return string
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function decrypt($data, $key = ''){
    $key    = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
    $data   = str_replace(array('-','_'),array('+','/'),$data);
    $mod4   = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    $data   = base64_decode($data);
    $expire = substr($data,0,10);
    $data   = substr($data,10);

    if($expire > 0 && $expire < time()) {
        return '';
    }
    $x      = 0;
    $len    = strlen($data);
    $l      = strlen($key);
    $char   = $str = '';

    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }

    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }else{
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return base64_decode($str);
}

/*
 * 发送短信
 * $mobile 手机号
 * $msg 消息
 */
/*
 * $msg 数组  #ordername#money#name#mobile#
 * 返回0正确,其他错误
 *
 */
function send_sms($mobile,$msg,$tpl_id=""){
    
    $url ='http://v.juhe.cn/sms/send?'; #请求的数据接口URL
    $tpl_value = '';
    if(is_array($msg) && !empty($msg)){
        foreach($msg as $k=>$v){
            //$tpl_value .= "#".$k."#=".urlencode($v)."&";
			$tpl_value .= "#".$k."#=".$v."&";
        }
    }
    $posts = array(
        'mobile' => $mobile,
        'tpl_id' => $tpl_id,//短信模板ID
        'tpl_value' => $tpl_value,
        'key' => C('SMS_KEY')
    );
    
    $url .= http_build_query($posts);

    $content = curl($url);
    if($content){
        $result =json_decode($content,true);
        return $result;
    }
    return false;//发送失败
}

/*清空缓存*/
function clear(){
	$cache      =   Think\Cache::getInstance();
	return $cache->clear();//清空缓存
}

/*判断对象是否存在*/
function is_set($data,$key){
	if(isset($data[$key]) && $data[$key]!=''){
		return true;
	}
	return false;
}

/**
 * 过滤参数的方法
 * @param allow 允许参数的数组
 * @param $must 必须的参数
 * @param param 需要判断的数组
 * $filter true开启内容过滤,false关闭,默认关闭
 * $notnull 必须的字段不能为空
 * @author shaou 2015/1/26
 */
function param_filter($param,$allow,$must=NULL,$filter=false,$notnull=false){
    if(empty($param)) return false;
    $newAllow = $newMust = array();
    $param = (array)$param;
    //判断必须参数
    if(!empty($must)){
        foreach ($must as $k){
            if(!isset($param[$k])) {//没有字段就返回
                return false;//缺少必须字段
            } else {
                $newMust[$k] = trim($param[$k]);//符合要求放在新数组,过滤空格
                if($filter){
                    $newMust[$k] = htmlspecialchars($newMust[$k]);
                }
                if($notnull){
                    if($newMust[$k] == ""){
                        return false;
                    }
                }
            }
        }
    }
    
    // 过滤无效参数
    if(!empty($allow)){
        foreach($allow as $k) {
            if(isset($param[$k])) {
                //符合要求的字段放在新数组
                $newAllow[$k] = trim($param[$k]);//过滤空格
                if($filter){
                    $newAllow[$k] = htmlspecialchars($newAllow[$k]);
                }
            }
        }
        //请求参数全部都不是允许的字段返回false
        if(empty($newAllow)){
            return false;
        }
    }
    //整合返回数组，相同字段会覆盖
    return $allow = array_merge($newAllow, $newMust);
}

//根据ip获取ip地址
function location2($ip,$type=1){
	$url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
	$content = curl($url);
	if($content){
		$res = json_decode($content,true);
		if($res['code'] == 0){
			$region = $res['data']['region'];//省
			$city = $res['data']['city'];//市
			$county = $res['data']['county'];//县
			if($type==1){
				if($region == $city){
					return $city.$county;
				}else{
					return $region.$city.$county;
				}
			}else{
				return $res['data'];
			}
			
		}
	}
	return false;
}

//查看快递物流信息
//单哈,快递公司
function wuliu($danhao,$com){
	
	//http://www.aikuaidi.cn/api/?type=2
	$company = array(
		"中通快递" => "zhongtong",
		"圆通快递" => "yuantong",
		"顺丰快递" => "shunfeng",
		"韵达快递" => "yunda",
		"EMS" => "ems",
		"申通快递" => "shentong",
		"天天快递" => "tiantian",
		"优速快递" => "yousu",
		"汇通快递" => "huitong",
		"德邦快递" => "debang",
		"天地华宇" => "tdhy",
		"国通快递" => "guotong",//EDN
		"宅急送快递" => "zjs",
		"安能物流" => "anwl",
		"DHL快递" => "dhl",
		"FEDEX国际快递" => "fedex",
		"FEDEX国内快递" => "fedexcn",
		"广东ems快递" => "gdems",
		"京东快递" => "jingdong",
		"佳吉快运" => "jiaji",
		"龙邦快递" => "longbang",
		"全峰快递" => "quanfeng",
		"如风达快递" => "rufengda",		
		"新邦物流" => "xinbang",
		"安捷快递" => "aj",
		"高铁速递" => "gtsd",
		"日日顺物流" => "rrs",
		"速尔快递" => "suer",
		"UPS国际快递" => "ups",
		"万象物流" => "wxwl",
		"信丰物流" => "xfwl",
		"增益快递" => "zengyi",
		"中铁快运" => "zhongtie",
	);
	
	$keyes = array(
		"6e5b5c0400594a6b9a703dfb1615a968","e8fb760e1dcb457c8ca3a17801beca48","3ab217fd0b3b401e9a4ce10dd098cd9e"
	);
	
	$res = S($com.$danhao);
	if($res){
	   return $res; 
	}
	
	shuffle($keyes);
	$key = $keyes[0];
	$wuliu = $company[$com];
	
	if(empty($wuliu)){
	    return false;
	}
	
    $url = sprintf('http://www.aikuaidi.cn/rest/?key=%s&order=%s&id=%s&ord=desc&show=json',$key,$danhao,$wuliu);
	
	$json = curl($url);
	
	if($json){
	    $res  = json_decode($json,true);
	    if($res['errCode'] != 3){
	        //结果缓存30分钟 $danhao,$com
	        if($res['status'] == 4){
	            //已经签收,永久缓存
	            S($com.$danhao,$res);
	        }else{
	            S($com.$danhao,$res,30*60);
	        }
	        
	        return $res;
	    }
	    //key不行了
	}
	
	return false;
	
}

/*
 * 写文件
 */
function rewrite($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}

/*
 * 检查bom头
 */
function checkBOM($filename) {
    $contents = file_get_contents($filename);
    $encode = mb_detect_encoding($contents, array('GB2312','GBK','UTF-8'));
    if(in_array($encode, array("GB2312","GBK","EUC-CN","CP936"))){
        $contents = iconv("GBK","UTF-8//TRANSLIT//IGNORE",$contents);
        rewrite($filename, $contents);
    }else{
        $contents = str_replace("\xEF\xBB\xBF","",$contents);
        rewrite($filename, $contents);
    }
}


/*
 检查身份证
 1男 2女
 */
function check_idcard($str,$sex='') {
    $p = vendor('idcard/idcard#class');
    $idcard = new idcard();
    return $res = $idcard->checkIdentity($str,$sex);
}


/*
 * 根据身份证获取性别
 * $str 身份证
 */
function get_idsex($str) {
    $p = vendor('idcard/idcard#class');
    $idcard = new idcard();
    $res = $idcard->checkSex($str);
    //性别）返回: 男真女假  1男 2女
    if($res){
        return 1;
    }else{
        return 2;
    }
}


/*
 * 计算两个日期之间的天数
 * $date1 较早的时间
 * $date2 最近的时间
 */
 function get_daynums($date1,$date2){
     $startdate=strtotime($date1);
     $enddate=strtotime($date2);
     $days=round(($enddate-$startdate)/86400);
     //向下取整
     $days = floor($days);
     return $days;
 }

 /*
  * 检查网址格式
  */
 function check_url($url){
     if (filter_var ($url, FILTER_VALIDATE_URL )) {
         return true;
     } else {
         return false;
     }
 }
 
 
 //导出excel
 function excel($datastr,$header='',$excel_name=''){
     $filename = $excel_name.date('Y-m-d').'.csv'; //设置文件名
     header("Content-type:text/csv;charset=utf-8");
     header("Content-Disposition:attachment;filename=".$filename);
     header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
     header('Expires:0');
     header('Pragma:public');
     echo  $content = "\xEF\xBB\xBF".$header.$datastr; //添加BOM
 }

 
 /*
  * 手机号码归属地
  */
 function guishudi($mobile){
     
     $apiurl = "http://api.wao021.cn/api/mobile?mobile=".$mobile;
     $res = curl($apiurl);
     $r = json_decode($res,true);
     $result = $r['data'];
     
     if($result){
         $r = array(
             "data" => array(
                 "areacode" => $result['area_id'],
                 "city" => $result['city'],
                 "operator" => $result['company'],
                 "postcode" => $result['518000'],
                 "province" => $result['province'],
             ),
             "error" => 0,
             "msg" => "succeed"
         );
     }else{
         $r = array(
             "data" => array(
             ),
             "error" => 1,
             "msg" => "error"
         );
     }
      
     return $r;
 }
 
 /*
  * 阿里大鱼短信
  * $sign 短信签名
  * $data 数组
  * $tmpid 模板id
  * $mobile手机号码, 多个用逗号隔开
  */
 function alisms($sign="身份验证",$mobile,$tmpid="SMS_5084186",$data) {

     if(!$mobile){
         return false;
     }
     
     vendor('dayu/TopSdk');
     $c = new TopClient;
     $c->appkey = C('ALIDAYU_APPKEY');
     $c->secretKey = C('ALIDAYU_APPSEC');
     $c->format = "json";

     $req = new AlibabaAliqinFcSmsNumSendRequest;
     
     $req->setExtend("123456");
     //公共回传参数，在“消息返回”中会透传回该参数；举例：用户可以传入自己下级的会员ID，在消息返回时，
     //该会员ID会包含在内，用户可以根据该会员ID识别是哪位会员使用了你的应用
     
     $req->setSmsType("normal");//短信类型，传入值请填写normal
     
     $req->setSmsFreeSignName($sign);//短信签名
     
     $json = json_encode($data);
     $req->setSmsParam($json);
     //短信模板变量，传参规则{"key":"value"}，key的名字须和申请模板中的变量名一致，多个变量之间以逗号隔开。
     //示例：针对模板“验证码${code}，您正在进行${product}身份验证，打死不要告诉别人哦！”，
     //传参时需传入{"code":"1234","product":"alidayu"}

     $req->setRecNum($mobile);
     //短信接收号码。支持单个或多个手机号码，传入号码为11位手机号码，
     //不能加0或+86。群发短信需传入多个号码，以英文逗号分隔，一次调用最多传入200个号码。
     //示例：18600000000,13911111111,13322222222
     
     $req->setSmsTemplateCode($tmpid);//
     //短信模板ID，传入的模板必须是在阿里大鱼“管理中心-短信模板管理”中的可用模板。示例：SMS_585014

     $resp = $c->execute($req);
     
     //file_put_contents('text.txt', json_encode($resp));

     return $resp;
     
//      if($resp['result']['success'] == 1){
//          return true;
//      }else{
//          //echo $resp['result']['err_code'];
//          return false;
//          //短信验证码，使用同一个签名，对同一个手机号码发送短信验证码，允许每分钟1条，累计每小时7条。 
//          //短信通知，使用同一签名、同一模板，对同一手机号发送短信通知，允许每天50条（自然日）。
//      }
     
     //true表示成功，false表示失败
     //Array ( [result] => Array ( [err_code] => 0
     //[model] => 100705958152^1101122871148 [success] => 1 ) [request_id] => 10wc7cswrsvcy )
     //pr($req);
 }
 
 
 /*
  * 本地存储远程图片
  */
  function save_remote($pic_url,$uid){
 
     if(!check_url($pic_url)){
         return false;
     }
     
      
     //如果已经在云端存储了,则不必再次上传
     $UPYUN_DOMAIN = C('UPYUN_DOMAIN');
     $find = stripos($pic_url,$UPYUN_DOMAIN);
     if(false !== $find){
         return false;
     }
     
     if (!stristr($pic_url , "http" )) {
         //这些域名的不需要再次下载了
         return false;
     }
     

     $uid = $uid ? $uid : 0;
 
     $stream = curl($pic_url);//图片流
     
     if(!$stream){
         return false;
     }

     //写入缓存
     $tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
     file_put_contents($tmp, $stream);
 
     $file = array(
         'pic' => array(
             "name" => $tmp,
             "tmp_name" => $tmp,
         )
     );
 
     //下载图片并上传到云服务器
     $upload = new \Think\Upload();
     $upload->rootPath  =  "/";
     $upload->savePath  = "/upload/".$uid."/";
     $filrInfo   =   $upload->upload($file);
     
     if($filrInfo){
         $thumb_url = $filrInfo['pic']['savepath'].$filrInfo['pic']['savename'];//拼接图片网址
         return $thumb_url;
     }
     return false;
 }
 
 /*
  * 获取视频id
  */
 function getVideoId($temp){
     preg_match('/<iframe(.*?)src=(.*?)vid=(.*?)&(.*?)<\/iframe>/',$temp,$a);
     return $a[3];
 }
 
/*
  * 判断是数字类型/字母类型/汉子类型
  * 汉字返回1 数字返回2 字母返回3 混合类型返回4
*/
 function checkStr($str){
     $a=ereg('['.chr(0xa1).'-'.chr(0xff).']', $str);
     $b=ereg('[0-9]', $str);
     $c=ereg('[a-zA-Z]', $str);
     if($a && !$b && !$c){return 1;}
     else if(!$a && $b && !$c){return 2;}
     else if(!$a && !$b && $c){return 3;}
     else{return 4;}
 }

  /*
  * 获取已经设置的参数
  * $params 需要检查的参数
  * $data 需要检查的数据
  */
 function getParmas($data,$params){
     $new_data = array();
     foreach($params as $k=>$v){
         if(isset($data[$v])){
             $new_data[$v] = $data[$v];
         }
     }
     return $new_data;
 }
 function checkPassword ($password) {
    $score = 0;
    $str = $password;
    if(preg_match("/[0-9]+/",$str))
    {
    $score ++;
    }
    if(preg_match("/[0-9]{3,}/",$str))
    {
    $score ++;
    }
    if(preg_match("/[a-z]+/",$str))
    {
    $score ++;
    }
    if(preg_match("/[a-z]{3,}/",$str))
    {
    $score ++;
    }
    if(preg_match("/[A-Z]+/",$str))
    {
    $score ++;
    }
    if(preg_match("/[A-Z]{3,}/",$str))
    {
    $score ++;
    }
    if(preg_match("/[_|\-|+|=|*|!|@|#|$|%|^|&|(|)]+/",$str))
    {
    $score += 2;
    }
    if(preg_match("/[_|\-|+|=|*|!|@|#|$|%|^|&|(|)]{3,}/",$str))
    {
    $score ++ ;
    }
    if(strlen($str) >= 10)
    {
    $score ++;
    }
    if($score<3){
        return_json(1,'密码过于简单，请更换密码');
    }
}
function base64url ($str) {
//    return strtr(base64_encode($str), '|/', '__');
    return str_replace('/', '|', base64_encode($str));
}

/*
 * 直推的报单金额总数
 */
function getReferMoney ($uid) {
//    $arr = array(
//        2 => 2980,
//        3 => 12900,
//        4 => 34200,
//        5 => 95020
//    );
//    $where = array(
//        'refer_uid' => $uid,
//        'grade_id' => array('gt',1)
//    );
//    $list = M('member')->where($where)->select();
//    $money = 0;
//    foreach ($list as $v) {
//        $money += $arr[$v['grade_id']];
//    }
    
    $where = array(
        'refer_uid' => $uid,
        'grade_id' => array('gt',1)
    );
    $list = M('member')->where($where)->select();
    $money = 0;
    foreach ($list as $v) {
        $owhere = array(
            'baodan_uid' => $v['uid'],
            'order_type' => 1
        );
        $res = M('order')->where($owhere)->sum('order_cashmoney');
        $m = $res>0?$res:0;
        $money += $m;
    }
    return $money;
    
}

    /*
     * 个人业绩
     * 包含自己补货和推下级的升级单金额
     */
     function _getMyMoney ($uid,$start='',$end='') {
        $where = array(
            'baodan_uid' => $uid,
            'checked' => array('in',array(1,2,5)),
            'order_type' => array('in',array(0,1,2))
        );
        if($start&&$end) {
            $where['pay_time'] = array('between',array($start,$end));
        }
        $all = M('order')->where($where)->sum('order_cashmoney');
        return round($all>0?$all:0,2);
    }

     /*
     * 团队补货和报单
     */
     function _getTeamMoney ($uid,$start='',$end='') {
        $all = _getMyMoney($uid,$start,$end);
//        $all = 0;
        $memberModel = M('member');
        $xiajilist = $memberModel->where(array('refer_uid'=>$uid))->field('uid,refer_uid,grade_id')->select();
        while(!empty($xiajilist)) {
            $uids = array();
            foreach ($xiajilist as $k=>$v) {
                if($v['grade_id']<5) {
                    
                }
                $uids[] = $v['uid'];
                $all += _getMyMoney($v['uid'],$start,$end);
            }
            if(empty($uids)) {
                break;
            }
            $xiajilist = $memberModel->where(array('refer_uid'=>array('in',$uids)))->field('uid,refer_uid,grade_id')->select();
        }
        return round($all>0?$all:0,2);
    }
    
    /*
     * 用户的月度业绩奖励
     */
    function monthYeji ($uid,$start,$end) {
        $memberModel = M('member');
        $xiajilist = $memberModel->where(array('refer_uid'=>$uid))->field('uid,refer_uid,grade_id')->select();
        $kou = 0;//需要扣除的金额
        
        while(!empty($xiajilist)) {
            $uids = array();
            foreach ($xiajilist as $k=>$v) {
                if($v['grade_id']==5) {
                    //第一层下级的联合创始人
                    $all = _getTeamMoney($v['uid']);
                    $month = _getTeamMoney($v['uid'],$start,$end);
                    $money = getYejiNum($all,$month);
                    $kou += $money;
                }else{
                    $uids[] = $v['uid'];
                }
            }
            if(empty($uids)) {
                break;
            }
            $xiajilist = $memberModel->where(array('refer_uid'=>array('in',$uids)))->field('uid,refer_uid,grade_id')->select();
        }
        
        //算本人的业绩
        $myall = _getTeamMoney($uid);
        $mymonth = _getTeamMoney($uid,$start,$end);
        $mymoney = getYejiNum($mymonth, $mymonth);
       
        $res = round($mymoney - $kou,2);
        return $res>0?$res:0;
    }
    
    /*
     * $all 团队总业绩
     * $month 月度团队总业绩
     */
    function getYejiNum ($all,$month) {
        $bili = 0;
        $arr = array(
            1 => array(
                'key' => 50000,
                'value' => 0.01
            ),
            2 => array(
                'key' => 100000,
                'value' => 0.02
            ),
            3 => array(
                'key' => 200000,
                'value' => 0.03
            ),
            4 => array(
                'key' => 300000,
                'value' => 0.04
            ),
            5 => array(
                'key' => 500000,
                'value' => 0.05
            ),
            6 => array(
                'key' => 800000,
                'value' => 0.06
            ),
            7 => array(
                'key' => 2000000,
                'value' => 0.07
            ),
            8 => array(
                'key' => 4000000,
                'value' => 0.08
            ),
            9 => array(
                'key' => 8000000,
                'value' => 0.09
            ),
            10 => array(
                'key' => 12000000,
                'value' => 0.1
            ),
            
            11 => array(
                'key' => 20000000,
                'value' => 0.105
            ),
            12 => array(
                'key' => 30000000,
                'value' => 0.11
            ),
            13 => array(
                'key' => 45000000,
                'value' => 0.115
            ),
            14 => array(
                'key' => 60000000,
                'value' => 0.12
            ),
            15 => array(
                'key' => 90000000,
                'value' => 0.125
            ),
            16 => array(
                'key' => 120000000,
                'value' => 0.13
            ),
            17 => array(
                'key' => 200000000,
                'value' => 0.135
            ),
        );
        
        if($all>=$arr[17]['key']) {
            $bili = $arr[17]['value'];
        }elseif($all>=$arr[16]['key']) {
            $bili = $arr[16]['value'];
        }elseif($all>=$arr[15]['key']) {
            $bili = $arr[15]['value'];
        }elseif($all>=$arr[14]['key']) {
            $bili = $arr[14]['value'];
        }elseif($all>=$arr[13]['key']) {
            $bili = $arr[13]['value'];
        }elseif($all>=$arr[12]['key']) {
            $bili = $arr[12]['value'];
        }elseif($all>=$arr[11]['key']) {
            $bili = $arr[11]['value'];
        }elseif($all>=$arr[10]['key']) {
            $bili = $arr[10]['value'];
        }elseif($all>=$arr[9]['key']) {
            $bili = $arr[9]['value'];
        }elseif($all>=$arr[8]['key']) {
            $bili = $arr[8]['value'];
        }elseif($all>=$arr[7]['key']) {
            $bili = $arr[7]['value'];
        }elseif($all>=$arr[6]['key']) {
            $bili = $arr[6]['value'];
        }elseif($all>=$arr[5]['key']) {
            $bili = $arr[5]['value'];
        }elseif($all>=$arr[4]['key']) {
            $bili = $arr[4]['value'];
        }elseif($all>=$arr[3]['key']) {
            $bili = $arr[3]['value'];
        }elseif($all>=$arr[2]['key']) {
            $bili = $arr[2]['value'];
        }elseif($all>=$arr[1]['key']) {
            $bili = $arr[1]['value'];
        }
        return round($month*$bili,2);
    }

     /*
      * 资金变动记录
      * 用户ID 金额（有正负）类型 备注
      * 1分销佣金 ,2积分流水,3现金电子币 ,4库存
      */
      function core_moneylog ($uid,$money,$type,$note,$order) {
        $memberModel = M('member');
        $member = $memberModel->where(array('uid'=>$uid))->find();
        if($money==0) {
            return false;
        }
        $money = round($money,2);
        $un_lock = 1;
        if($type==4) {
            $res = $memberModel->where(array('uid'=>$uid))->setInc('stock',$money);
            $yue = $member['stock']+$money;
        }elseif($type==1) {
            $shuoding = C('YONGJIN_LOCK');
            if($shuoding == 0){
                $res = $memberModel->where(array('uid'=>$uid))->setInc('money',$money);
            }else if($shuoding>0){
                $res = $memberModel->where(array('uid'=>$uid))->setInc('lock_money',$money);
                $un_lock = 0;
            }
            $yue = $member['money']+$member['lock_money']+$money;
        }
        if($res) {
            $log = array(
                'uid' => $uid,
                'nickname' => $member['nickname'],
                'mtype' => $type,
                'content' => $note,
                'logtype' => $money>0?1:0,
                'money' => abs($money),
                'order_id' => $order['order_id'],
                'create_time' => date('Y-m-d H:i:s'),
                'un_lock' => $un_lock,
                'cash_money' => $yue,
            );
            M('moneylog')->add($log);
        }
    }
 
include('emoji.php');//微信表情包